/**	
 * タイトル：	xml信息读取类
 * 説明：    
 * 			路径表达式	结果
 *			/bookstore/book[1]	选取属于 bookstore 子元素的第一个 book 元素。
 *			/bookstore/book[last()]	选取属于 bookstore 子元素的最后一个 book 元素。
 *			/bookstore/book[last()-1]	选取属于 bookstore 子元素的倒数第二个 book 元素。
 *			/bookstore/book[position()<3]	选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
 *			/title[@lang]	选取所有拥有名为 lang 的属性的 title 元素。
 *			/title[@lang='eng']	选取所有 title 元素，且这些元素拥有值为 eng 的 lang 属性。
 *			/bookstore/book[price>35.00]	选取 bookstore 元素的所有 book 元素，且其中的 price 元素的值须大于 35.00。
 *			/bookstore/book[price>35.00]/title	选取 bookstore 元素中的 book 元素的所有 title 元素，且其中的 price 元素的值须大于 35.00。
 * 			
 * 			具体请查看XPath语法 {@link http://www.w3school.com.cn/xpath/xpath_syntax.asp}
 *	
 * 会社名：	紹興日創軟件有限公司
 * 変更履歴：	2014/08/13 NIS 何
 *			新規作成
 *
 */
package com.nissoft.framework.message;

import java.io.File;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

/**
 * @author NIS 何
 * @version 1.0
 */
public class XmlMessageReader extends FileMessageReader<Document> {

	@Override
	protected String[] getDefaultExtensions() {
		return new String[] { ".xml" };
	}

	@Override
	protected String getFileKey(String pattern) {

		int lastSeparator = pattern.lastIndexOf(separator);
		return pattern.substring(0, lastSeparator == -1 ? pattern.length()
				: lastSeparator);
	}

	@Override
	public Document loadFile(File file) throws IOException {

		SAXReader reader = new SAXReader();
		reader.setEncoding(encoding);
		try {
			return reader.read(file);
		} catch (DocumentException e) {
			throw new IOException("load xml error", e);
		}
	}

	@Override
	public String readInternal(String pattern, Document e) {

		int lastSeparator = pattern.lastIndexOf(separator);
		String xpath = pattern.substring(lastSeparator + 1);
		Node n = e.selectSingleNode(xpath);
		return n == null ? "" : n.getText();
	}
}
